Skip to content

Conversation

@asaadbalum
Copy link

@asaadbalum asaadbalum commented Nov 24, 2025

This PR implements the Istio profile for the E2E testing framework as requested in issue #656.

Overview

Adds comprehensive Istio service mesh integration testing for Semantic Router, enabling validation of sidecar injection, traffic routing, mTLS, and observability features.

What Changed

Istio Profile Implementation (e2e/profiles/istio/)

  • 5-stage deployment pipeline:

    1. Install Istio control plane via Helm (base, istiod, ingress gateway)
    2. Configure namespace with automatic sidecar injection
    3. Deploy Semantic Router with Istio sidecar
    4. Create Istio Gateway, VirtualService, and DestinationRule
    5. Verify environment health and readiness
  • Helm-based installation: Uses official Istio Helm charts from istio-release.storage.googleapis.com

  • Configurable version: Override via ISTIO_VERSION environment variable (default: 1.28.0)

  • Robust error handling: Panic recovery with defer-based cleanup for partial deployments

  • Health verification: 60-second stabilization period ensures mesh readiness before tests

Test Cases (4/4 Passing - 100%)

All tests required by issue #656 implemented and verified:

Test Case Purpose Duration
istio-sidecar-health-check Verify Envoy sidecar injection and health 128ms
istio-traffic-routing Test routing through Istio ingress gateway 2.29s
istio-mtls-verification Verify ISTIO_MUTUAL TLS configuration 2.00s
istio-tracing-observability Validate distributed tracing and metrics 3.76s

Helper Function Enhancement (e2e/pkg/helpers/kubernetes.go)

  • Created GetServiceByLabelInNamespace() for generic service lookup by namespace
  • Maintained GetEnvoyServiceName() as backward-compatible wrapper (hardcoded to envoy-gateway-system)
  • Enables Istio profile to query services in istio-system namespace

CI/CD Integration

  • Added istio to test matrix in .github/workflows/integration-test-k8s.yml
  • No additional CI dependencies required (Helm-based installation)

Documentation (e2e/README.md)

  • Added comprehensive Istio profile section (135 lines)
  • Prerequisites, setup steps, test cases, and troubleshooting
  • Usage examples with custom Istio versions
  • Documented Helm-based installation approach

Design Decisions

Helm vs istioctl

Decision: Use Helm charts for Istio installation
Rationale:

  • ✅ No CI/CD dependencies (no istioctl installation required)
  • ✅ Declarative and version-controlled
  • ✅ Official Istio Helm charts from Google Cloud Storage

Test Scope

Focus: Istio-specific functionality (sidecar, gateway, mTLS, observability)
Excluded: Signal-decision engine tests (can be added in follow-up PR, following pattern from PR #695)

Kubernetes Version

Approach: Use Kind's default (v1.29.2 in CI)
Rationale: CI uses Kind v0.22.0 which defaults to K8s 1.29.2, meeting Istio 1.28+ requirements without explicit pinning

Testing Done

✅ All 4 Istio test cases pass (100% success rate)
✅ Istio installed via Helm (base, istiod, ingress gateway verified)
✅ Sidecar injection confirmed (istio-proxy container present and healthy)
✅ Traffic routing through Istio gateway successful (HTTP 200, Envoy headers detected)
✅ mTLS configuration verified (ISTIO_MUTUAL mode in DestinationRule)
✅ Observability features validated (Envoy metrics, Istio telemetry)
✅ Clean teardown confirmed (all Helm releases uninstalled, namespace deleted)
✅ Backward compatibility maintained (existing profiles unchanged)

Usage

Run all Istio tests

make e2e-test E2E_PROFILE=istio

Run with verbose output

make e2e-test E2E_PROFILE=istio E2E_VERBOSE=1

Test with specific Istio version

ISTIO_VERSION=1.28.0 make e2e-test E2E_PROFILE=istio

Setup only (for debugging)

make e2e-setup E2E_PROFILE=istio

Files Changed

  • e2e/profiles/istio/profile.go (607 lines) - Istio profile implementation
  • e2e/testcases/istio_*.go (765 lines) - 4 test case implementations
  • e2e/pkg/helpers/kubernetes.go - Generic service lookup helper
  • e2e/cmd/e2e/main.go - Profile registration
  • e2e/README.md - Istio profile documentation
  • .github/workflows/integration-test-k8s.yml - CI integration
  • tools/make/e2e.mk - Make target help text

Total: 11 files changed, +1,522 lines, -10 lines

FIX #656

@netlify
Copy link

netlify bot commented Nov 24, 2025

Deploy Preview for vllm-semantic-router ready!

Name Link
🔨 Latest commit 33927d7
🔍 Latest deploy log https://app.netlify.com/projects/vllm-semantic-router/deploys/69261913852a6400085b1198
😎 Deploy Preview https://deploy-preview-728--vllm-semantic-router.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link

github-actions bot commented Nov 24, 2025

👥 vLLM Semantic Team Notification

The following members have been identified for the changed files in this PR and have been automatically assigned:

📁 e2e

Owners: @Xunzhuo
Files changed:

  • e2e/profiles/istio/profile.go
  • e2e/testcases/istio_mtls_verification.go
  • e2e/testcases/istio_sidecar_health_check.go
  • e2e/testcases/istio_tracing_observability.go
  • e2e/testcases/istio_traffic_routing.go
  • e2e/README.md
  • e2e/cmd/e2e/main.go
  • e2e/pkg/helpers/kubernetes.go
  • e2e/testcases/common.go

📁 Root Directory

Owners: @rootfs, @Xunzhuo
Files changed:

  • .github/workflows/integration-test-k8s.yml

📁 tools

Owners: @yuluo-yx, @rootfs, @Xunzhuo
Files changed:

  • tools/make/e2e.mk

vLLM

🎉 Thanks for your contributions!

This comment was automatically generated based on the OWNER files in the repository.

@rootfs
Copy link
Collaborator

rootfs commented Nov 24, 2025

@srampal PTAL, thanks

@asaadbalum
Copy link
Author

asaadbalum commented Nov 24, 2025

Hello Reviewers.
Bare in mind that the current implementation installs the Istio binary at the ci workflow step, I'm considering a Helm-Based Installation during the Istio setup() phase.
Edit: Done

@asaadbalum asaadbalum force-pushed the istio_profile branch 2 times, most recently from c71d529 to bccdccf Compare November 24, 2025 15:51
Copy link
Member

@Xunzhuo Xunzhuo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

initially i think this is good to go, separetly with istio specific cases but still i think we need to reuse the testcases to make sure istio gateway with vsr functionality work well

Add comprehensive E2E testing profile for Istio service mesh integration,
enabling validation of Semantic Router functionality within Istio's
service mesh architecture.

Implementation:
- Add Istio profile with Helm-based installation of Istio components
- Implement 4 Istio-specific test cases:
  * Sidecar health check and injection validation
  * Traffic routing through Istio Gateway and VirtualService
  * mTLS verification for secure service communication
  * Distributed tracing and observability integration
- Integrate profile into CI/CD pipeline matrix
- Update documentation with Istio profile usage and configuration

Technical Details:
- Uses Helm charts for Istio installation (base, istiod, gateway)
- Automatic sidecar injection via namespace labeling
- Configures Gateway, VirtualService, and DestinationRule
- Validates mTLS, metrics collection, and tracing headers
- Zero breaking changes to existing profiles

Closes vllm-project#656

Signed-off-by: AI Assistant <[email protected]>
Signed-off-by: Asaad Balum <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[E2E] Add Istio profile for E2E testing framework

3 participants